package com.beyond.trace.domain.dto.warn.device;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.util.Date;
import java.util.Objects;

/**
 * @ClassName: WeatherStation
 * @author: z越
 * @date: 2023/2/27  14:53
 * @description 气象站定时器上传数据
 */
@Data
public class WeatherStation {
    /**
     * 设备号
     */
    private String imei;

    /**
     * 经度
     */
    private Double lng;

    /**
     * 纬度
     */
    private Double lat;

    /**
     * 湿度
     */
    private Float hum;

    /**
     * 温度
     */
    private Float term;

    /**
     * 记录时间
     */
    private Date recordTime;

    /**
     * 风力
     */
    private Float windPower;

    /**
     * 风速
     */
    private Float windSpeed;

    /**
     * 风向
     */
    private Float wdir;

    //风向汉字
    @TableField(exist = false)
    private String wdirStr = getWdirStr();

    /**
     * 气压
     */
    private Float airPressure;

    /**
     * 雪量
     */
    private Float warn;

    /**
     * 噪音
     */
    private Float noise;

    /**
     * pm25
     */
    private Float pm25;

    /**
     * pm10
     */
    private Float pm10;

    /**
     * 光照强度
     */
    private Integer hv;

    /**
     * 上一日降雨量
     */
    private Float lastDayRainfall;

    /**
     * 当前降雨量
     */
    private Float currentRainfall;

    /**
     * 瞬时降雨量
     */
    private Float transRainfall;

    /**
     * 累计降雨量
     */
    private Float totalRainfall;

    /**
     * 土壤温度
     */
    private Float soilTerm;

    /**
     * 土壤湿度
     */
    private Float soilHum;

    /**
     * co2浓度
     */
    private Float co2;

    /**
     * 棚内co2浓度
     */
    private Float inCo2;

    /**
     * 棚内土壤温度
     */
    private Float inSoilTerm;
    /**
     * 棚内土壤湿度
     */
    private Float inSoilHum;

    /**
     * 棚内湿度
     */
    private Float inHum;

    /**
     * 棚内温度
     */
    private Float inTerm;

    /**
     * 棚内pm25
     */
    private Float inPm25;

    /**
     * 棚内pm10
     */
    private Float inPm10;

    /**
     * 有无水侵
     */
    private Float leak;

    /**
     * 棚内光照强度
     */
    private Float inHv;

    /**
     * 棚内土壤ec值
     */
    private Float inSoilEc;

    /**
     * 棚内土壤ph值
     */
    private Float inSoilPh;

    /**
     * 土壤ph值
     */
    private Float soilPh;
    /**
     * 土壤ec值
     */
    private Float soilEc;

    @ApiModelProperty("二氧化硫")
    private Float so2;
    @ApiModelProperty("二氧化氮")
    private Float no2;
    @ApiModelProperty("臭氧含量")
    private Float o3;
    @ApiModelProperty("一氧化碳")
    private Float co;

    //负氧离子
    private Float oxide;

    private Float nit;

    private Float phos;

    private Float kal;  // 氮磷钾

    private Float radio; //太阳 总辐射

    private Float sunshine; // 光照时长

    private Float dew;  //  结露点温度

    private Float eva;  //  蒸发量

    private Float qp;  //  光合有效辐射

    private Integer status;

    public WeatherStation(JSONObject js){
        this.imei = js.getString("imei");
        this.pm25 = js.getFloat("pm25");
        this.co2 = js.getFloat("co2");
        this.term = js.getFloat("term");
        this.hum = js.getFloat("hum");
        this.hv = js.getInteger("hv");
        this.windSpeed = js.getFloat("windSpeed");
        this.totalRainfall = js.getFloat("totalRainfall");
        this.radio = js.getFloat("radio");
    }

    // @JsonIgnore
    public String getWdirStr(){
        return getWdirStr(this.getWdir());
    }

    public static String getWdirStr(Float  wdirVal){
        if(wdirVal == null){
            return null;
        }

        String wdir = "北";
        if ( wdirVal >= 22.5 && wdirVal <= 67.5){
            wdir = "东北";
        } else if ( wdirVal > 67.5 && wdirVal <= 112.5) {
            wdir = "东";
        } else if (wdirVal > 112.5 && wdirVal <= 157.5) {
            wdir = "东南";
        } else if (wdirVal > 157.5 && wdirVal <= 202.5) {
            wdir = "南";
        } else if (wdirVal > 202.5 && wdirVal <= 247.5) {
            wdir = "西南";
        } else if (wdirVal > 247.5 && wdirVal <= 292.5) {
            wdir = "西";
        } else if (wdirVal > 292.5 && wdirVal <= 337.5) {
            wdir = "西北";
        } else {

        }
        return wdir;
    }

    public static Float getWdirValue(String  wdirStr){
        if(wdirStr == null){
            return null;
        }

        if (Objects.equals("东北风",wdirStr)){
            return  30f;
        }else if (Objects.equals("东风",wdirStr)){
            return  70f;
        }else if (Objects.equals("东南风",wdirStr)){
            return  120f;
        }else if (Objects.equals("南风",wdirStr)){
            return  170f;
        }else if (Objects.equals("西南风",wdirStr)){
            return  220f;
        }else if (Objects.equals("西风",wdirStr)){
            return  270f;
        }else if (Objects.equals("西北风",wdirStr)){
            return  320f;
        }else if (Objects.equals("北风",wdirStr)){
            return  10f;
        }else {
            return null;
        }
    }

    /**
     * 不同区间的风向转换为 360度的风向值 ,  如 0 - 1.8 对应 0 - 360  conver是225
     * @author fwx
     * @date 2021/6/8 9:54
     **/
    @JsonIgnore
    public static Float getConvertValue(Float wdir, int conver){
        if(wdir == null){
            return 0f;
        }
        return wdir * conver;
    }


}
